<?php

namespace common\extensions;

use Yii;

use yii\data\Pagination; // 分页基础类
use yii\helpers\Json; // json
use yii\helpers\ArrayHelper;

/*
* 基础分页类
*/

class Page
{
    /**
     * @name 带分页格式化数据功能
     * @param object $query 查询数据
     * @param int $limit 分页数量
     */
    public static function PageArray($query, $limit = 20)
    {
        $countQuery = clone $query;

        $limit = input('limit', 0) ? input('limit') : $limit; // 每页数量,优先使用接收值
        $count = $countQuery->count();
        $pages = new Pagination([
            'totalCount' => $count,
            'pageSize' => $limit,
            'validatePage' => false, // page超过最大页数不进行处理
        ]);
        $data = $query->offset($pages->offset)->limit($pages->limit)->asArray()->all();

        // 对象转换为数组
        $page = ArrayHelper::toArray($pages);
        $pagecount = $pages->getPageCount();
        $currentpage = $pages->getPage() + 1;
        $links = $pages->getLinks(true);

        return [
            'count' => $count, // 数据总数
            'pagecount' => $pagecount, // 分页总数
            'pagesize' => $limit, // 设置分页数量
            'currentpage' => $currentpage, // 当前页
            'links' => $links, // 链接
            'data' => $data, // 数据
        ];
    }

    /**
     * layui page 分页  也可使用 layui_page
     * 在 controller
     * 使用一：
     * $query = Model::find();
     * return Page::PageArray($query)
     *
     * 使用二：
     * $query = Model::find();
     * $data =  Page::LayuiPage($query)
     * return layui_page(0, $data);
     *
     * layui 使用示例
     * 分页模块文档： https://www.layui.com/doc/modules/laypage.html
     * table 数据表格文档：https://www.layui.com/doc/modules/table.html
     * 代码示例： https://www.layui.com/demo/table/page.html
     * */
    public static function LayuiPage($query, $code = 0, $msg = 'ok')
    {
        $data = self::PageArray($query);

        $response = \Yii::$app->getResponse();
        $response->format = \yii\web\Response::FORMAT_JSON;
        $response->data = [
            'code' => $code,
            'msg' => $msg,
            'data' => $data['data'],
            'count' => $data['count'],
        ];
        return $response;
    }

}
